package algorithm.leetcode.I101to200;


/**
 * 要求跟Q121差不多,不过交易次数被限定到了2次
 * 除了秀我无fk说
 */


//         无操作  买1  买1卖1  买2卖1  买2卖2
//
// 无0      不动   买入   -      -      -
// 买1       -    不动   卖出    -      -
// 买1卖1    -     -     不动   买入     -
// 买2卖1    -     -     -     不动    卖出
// 买2卖2    -     -     -      -     不动
//
public class Q123 {

    public int maxProfit(int[] prices) {
        // 四个变量维护四个状态的最大收益, 初始状态有点tricky
        int buy1 = -prices[0];
        int buy1sell1 = 0;
        int buy2sell1 = -prices[0];
        int buy2sell2 = 0;

        for (int i = 1; i < prices.length; i++) {
            buy1 = Math.max(-prices[i], buy1);
            buy1sell1 = Math.max(buy1 + prices[i], buy1sell1);
            buy2sell1 = Math.max(buy2sell1, buy1sell1 - prices[i]);
            buy2sell2 = Math.max(buy2sell2, buy2sell1 + prices[i]);
        }
        return Math.max(buy1sell1, buy2sell2);
    }

    public static void main(String[] args) {
        Q123 q123 = new Q123();
        System.out.println(q123.maxProfit(new int[]{1,2,4,2,5,7,2,4,9,0}));
    }

}
